import axios from 'axios'

// 创建单独的axios实例用于AI API
// 使用相对路径，通过vue.config.js中的代理配置转发请求
const aiApi = axios.create({
  baseURL: '/api/ai',
  timeout: 60000, // 增加超时到60秒，确保有足够时间处理本地智能回复
  headers: {
    'Content-Type': 'application/json'
  }
})

// 添加JWT认证拦截器
aiApi.interceptors.request.use(
  config => {
    const token = localStorage.getItem('token')
    if (token) {
      config.headers.Authorization = `Bearer ${token}`
    }
    return config
  },
  error => {
    return Promise.reject(error)
  }
)

/**
 * AI服务模块 - 处理AI模型获取和AI聊天功能
 */
export const aiService = {
  // 获取可用的AI模型列表
  getAvailableModels: async () => {
    try {
      console.log('开始获取AI模型列表，请求URL:', '/api/ai/models')
      const response = await aiApi.get('/models')
      console.log('获取AI模型列表成功，共', response.data.length, '个模型')
      return response.data
    } catch (error) {
      console.error('获取AI模型列表失败:', error)
      console.log('错误详情:', error.response?.data, '状态码:', error.response?.status)
      console.log('请求配置:', error.config)
      console.log('错误消息:', error.message)
      
      // 返回阿里云百炼模型作为备用
      return [
        {
          id: 'qwen-turbo',
          name: '通义千问 Turbo',
          description: '高性能模型，响应迅速，适合日常对话',
          type: 'free'
        },
        {
          id: 'qwen-plus',
          name: '通义千问 Plus',
          description: '高级模型，能力更强，适合复杂任务',
          type: 'free'
        },
        {
          id: 'qwen-max',
          name: '通义千问 Max',
          description: '专业模型，性能最强，适合专业领域',
          type: 'free'
        }
      ]
    }
  },

  // 发送消息给AI并获取回复
  sendMessageToAI: async (message, modelId = 'qwen-turbo') => {
    try {
      console.log(`开始向AI发送消息，模型: ${modelId}`, message)
      const response = await aiApi.post('/chat', {
        message: message,
        modelId: modelId
      })
      console.log('收到AI响应:', response.data)
      return response.data
    } catch (error) {
      console.error(`向AI发送消息失败，模型: ${modelId}`, error)
      console.log('错误详情:', error.response?.data, '状态码:', error.response?.status)
      
      // 基于错误类型提供更友好的错误信息
      let errorMessage = '与AI服务通信失败';
      
      if (error.response?.status === 401) {
        errorMessage = '未授权访问，请先登录';
      } else if (error.response?.status === 429) {
        errorMessage = '请求过于频繁，请稍后再试';
      } else if (error.response?.status === 500) {
        errorMessage = 'AI服务暂时不可用，请稍后再试';
      } else if (error.response?.data?.message) {
        errorMessage = error.response.data.message;
      } else if (error.message.includes('timeout')) {
        errorMessage = 'AI服务响应超时，请稍后再试';
      }
      
      // 创建一个标准的错误对象返回，但包含默认的响应内容，确保界面能够正常显示
      return {
        success: false,
        error: 'ai_service_error',
        message: errorMessage,
        modelId: modelId,
        response: '我是AI助手。虽然当前无法连接到后端服务，但我仍可以为您提供基本的交互体验。请稍后再试，或者尝试重新加载页面。',
        content: '我是AI助手。虽然当前无法连接到后端服务，但我仍可以为您提供基本的交互体验。请稍后再试，或者尝试重新加载页面。'
      }
    }
  },

  // 根据类型分组模型
  groupModelsByType: (models) => {
    const grouped = {
      free: [],
      premium: []
    }
    
    models.forEach(model => {
      const type = model.type === 'free' || model.type === '轻量' || model.type === '通用' ? 'free' : 'premium'
      grouped[type].push(model)
    })
    
    return grouped
  },

  // 设置当前使用的AI模型
  setCurrentModel: (modelId) => {
    localStorage.setItem('currentAIModel', modelId)
  },
  
  // 获取当前使用的AI模型
  getCurrentModel: () => {
    return localStorage.getItem('currentAIModel') || 'qwen-turbo'
  }
}